import { Observable } from "../Observable";
/**
 * map操作符允许你对Observable中的每个值进行转换，并返回一个新的 Observable。它接受一个函数作为参数，该函数定义如何转换每个值。
 * @param {*} project 一个函数 例如 map((val) => val * 2)) 的 (val) => val * 2)
 * @returns
 */
export function map(project) {
  //operation 传入老的Observable source,返回新的Observable
  return (source) => {
    // 并返回一个新的 Observable
    // subscriber 是最后一个订阅的 .subscribe 传入的值
    return new Observable(function (subscriber) {
      // source.subscribe 老的老的Observable ，嵌套一个 新的
      return source.subscribe({
        ...subscriber,
        //最关键的是要重写next方法,此value是老的Observable传过来的老值
        next: (value) => {
          subscriber.next(project(value));
        },
      });
    });
  };
}
